package cn.sylinx.common.ext.vertx;

import io.vertx.core.AsyncResult;
import io.vertx.core.Handler;
import io.vertx.core.Vertx;
import io.vertx.core.eventbus.Message;
import io.vertx.core.json.JsonObject;

public enum VertxHolder {

	INSTANCE;

	public static VertxHolder get() {
		return INSTANCE;
	}

	private Vertx vertx;

	public Vertx vertx() {
		if (vertx == null) {
			init();
		}
		return vertx;
	}

	private synchronized void init() {
		if (vertx == null) {
			vertx = Vertx.vertx();
		}
	}

	/**
	 * 发送事件
	 * 
	 * @param address
	 * @param message
	 */
	public void send(String address, JsonObject message) {
		vertx().eventBus().send(address, message);
	}

	/**
	 * 发送事件，有结果回调
	 * 
	 * @param address
	 * @param message
	 * @param replyHandler
	 */
	public void send(String address, JsonObject message, Handler<AsyncResult<Message<JsonObject>>> replyHandler) {
		vertx().eventBus().request(address, message, replyHandler);
	}
}
